<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //await 表达式的使用：
        //  await 右侧的表达式一般为 promise 对象, 但也可以是其它的值
        // 如果表达式是 promise 对象, await 返回的是 promise 成功的值
        // await 必须写在 async 函数中, 但 async 函数中可以没有 await
        // 如果 await 的 promise 失败了, 就会抛出异常, 需要通过 try...catch 捕获处理如果 await 的 promise 失败了, 就会抛出异常, 需要通过 try...catch 捕获处理

        async function demo(){
            // 针对下面成功的promise对象，要获取里面的内容，需要使用then方法
            const p = Promise.resolve("执行成功1");
            p.then(v => {
                console.log(v);
            })
            console.log("ok1");

            // 除了上面的使用then方法外，我们还可以使用await来获取
            let v = await Promise.resolve("执行成功2");  
            console.log(v); 
            
            // 注意：await 必须写在 async 函数中

            // 若await的promise失败了, 就会抛出异常，需try ... catch处理
            try{
                let v2 = await Promise.reject("执行成功3");  
                console.log(v2); 
            }catch(e){
                console.warn("错误信息：", e);
            }
            console.log("ok3"); 


            // await后面不是一个promise对象,而是返回一个数值
            let m = await (() => {return 100})();
            console.log(m);
        }

        // 运行demo查看效果
        demo();

    </script>
</body>
</html>